import axios from "axios";

const baseUrl = "/api";
//axios二次封装核心
class HttpRequest {//创建一个类
  constructor(baseUrl) {//初始化函数，用于创建 HttpRequest 类的实例。
    this.baseUrl = baseUrl;
  }
  //定义初始参数,返回一个配置对象 config，该对象包含了请求的基础配置。
  getInsideConfig() {
    const config = {
      baseUrl: this.baseUrl,
      header: {},
    };
    return config;
  }

interception(instance){//把拦截器封装在一个函数中
    // 添加请求拦截器
instance.interceptors.request.use(function (config) {
    // 在发送请求之前做些什么
    return config;
  }, function (error) {
    // 对请求错误做些什么
    return Promise.reject(error);
  });

// 添加响应拦截器
instance.interceptors.response.use(function (response) {
    // 2xx 范围内的状态码都会触发该函数。
    // 对响应数据做点什么
    return response;
  }, function (error) {
    // 超出 2xx 范围的状态码都会触发该函数。
    // 对响应错误做点什么
    return Promise.reject(error);
  });
}
//把原本axios中的request也重新了，所以后面调请求不能省略request
  request(options) {//options是形参，代表外部传来的参数
    options = { ...this.getInsideConfig(), ...options };
    //通过扩展运算符将options和config本来的参数解构出来并合并
    //创建axios的实例
    const instance = axios.create();
    this.interception(instance)//调用封装的拦截器函数创建拦截器实例
    return instance(options);//通过options创建axios实例
  }
}
export default new HttpRequest(baseUrl);//通过创建的类和Url创建实例并导出
//在index.js中引入的东西.request才是真正能使用的axios
